package com.master.bd;

import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.Iterator;

import com.master.ed.Rota_Produto_PropostaED;
import com.master.root.CidadeBean;
import com.master.root.EstadoBean;
import com.master.root.PaisBean;
import com.master.util.Excecoes;
import com.master.util.JavaUtil;
import com.master.util.Mensagens;
import com.master.util.bd.ExecutaSQL;
import com.master.util.Utilitaria;

public class Rota_Produto_PropostaBD {

	public Rota_Produto_PropostaBD() {

	}

	private ExecutaSQL executasql;

	Utilitaria util = new Utilitaria(executasql);

	public Rota_Produto_PropostaBD(ExecutaSQL sql) {
		this.executasql = sql;
		util = new Utilitaria(this.executasql);
	}

	public Rota_Produto_PropostaED inclui(Rota_Produto_PropostaED ed) throws Excecoes {

		String sql = null;
		try {

			ed.setOid_rota_produto_proposta(util.getAutoIncremento("oid_Rota_Produto_proposta", "Rotas_Produtos_propostas"));

			sql = " INSERT INTO Rotas_Produtos_Propostas (" + "OID_Rota_Produto_Proposta" + ", oid_Produto_Proposta"
					+ ", oid_origem, dm_origem, nm_origem, oid_destino, dm_destino, nm_destino, oid_consignatario, dm_consignatario, nm_consignatario "
					+ ", nr_volume_mensal, vl_servico, vl_servico_minimo, dm_unidade, nr_volume_minimo "
					+ ", tx_viagens, tx_veiculos "
					+ ", tx_equipamentos, tx_capacidade_carga, tx_observacao "
					+ ", vl_advalorem, vl_pedagio, vl_taxa"
					+", oid_pessoa_origem, oid_pessoa_destino, oid_pessoa_consignatario"
					+ ") VALUES (" + ed.getOid_rota_produto_proposta()
					+ ", " + ed.getOid_produto_proposta() + ", "
					+ ed.getOid_origem() + ", "
					+ util.getSQLString(ed.getDm_origem()) + ", "
					+ util.getSQLString(ed.getNm_origem()) + ", "
					+ ed.getOid_destino() + ", "
					+ util.getSQLString(ed.getDm_destino()) + ", "
					+ util.getSQLString(ed.getNm_destino()) + ", "
					+ ed.getOid_consignatario() + ", "
					+ util.getSQLString(ed.getDm_consignatario()) + ", "
					+ util.getSQLString(ed.getNm_consignatario()) + ", "
					+ ed.getNr_volume_mensal() + ", "
					+ ed.getVl_servico() + ", "
					+ ed.getVl_servico_minimo() + ", "
					+ util.getSQLString(ed.getDm_unidade()) + ", "
					+ ed.getNr_volume_minimo() + ", "
					+ util.getSQLString(ed.getTx_viagens()) + ", "
					+ util.getSQLString(ed.getTx_veiculos()) + ", "
					+ util.getSQLString(ed.getTx_equipamentos()) + ", "
					+ util.getSQLString(ed.getTx_capacidade_carga()) + ", "
					+ util.getSQLString(ed.getTx_observacao()) + ", "
					+ ed.getVl_advalorem() + ", "
					+ ed.getVl_pedagio() + ", "
					+ ed.getVl_taxa() + ", "
					+ util.getSQLString(ed.getOid_pessoa_origem()) + ", "
					+ util.getSQLString(ed.getOid_pessoa_destino()) + ", "
					+ util.getSQLString(ed.getOid_pessoa_consignatario()) + " "
					+ ")";

			executasql.executarUpdate(sql);
			return ed;
		} catch (Mensagens exc) {
			throw exc;
		} catch (Exception exc) {
			throw new Excecoes(exc.getMessage(), exc,
					this.getClass().getName(), "inclui()");
		}
	}

	public void altera(Rota_Produto_PropostaED ed) throws Excecoes {

		String sql = null;
		try {

			sql = " UPDATE Rotas_Produtos_Propostas SET ";
			sql+= "oid_origem="+ ed.getOid_origem();
			sql+= ",dm_origem="+ util.getSQLString(ed.getDm_origem());
			sql+= ",nm_origem="+ util.getSQLString(ed.getNm_origem());
			sql+= ",oid_destino="+ ed.getOid_destino();
			sql+= ",dm_destino="+ util.getSQLString(ed.getDm_destino());
			sql+= ",nm_destino="+ util.getSQLString(ed.getNm_destino());
			sql+= ",oid_consignatario="+ ed.getOid_consignatario();
			sql+= ",dm_consignatario="+ util.getSQLString(ed.getDm_consignatario());
			sql+= ",nm_consignatario="+ util.getSQLString(ed.getNm_consignatario());
			sql+= ",nr_volume_mensal="+ed.getNr_volume_mensal();
			sql+= ",vl_servico="+ed.getVl_servico();
			sql+= ",vl_servico_minimo="+ed.getVl_servico_minimo();
			sql+= ",dm_unidade="+ util.getSQLString(ed.getDm_unidade());
			sql+= ",nr_volume_minimo="+ed.getNr_volume_minimo();
			sql+= ",tx_veiculos="+ util.getSQLString(ed.getTx_veiculos());
			sql+= ",tx_viagens="+ util.getSQLString(ed.getTx_viagens());
			sql+= ",tx_equipamentos="+ util.getSQLString(ed.getTx_equipamentos());
			sql+= ",tx_capacidade_carga="+ util.getSQLString(ed.getTx_capacidade_carga());
			sql+= ",tx_observacao="+ util.getSQLString(ed.getTx_observacao());
			sql+= ",vl_advalorem="+ed.getVl_advalorem();
			sql+= ",vl_pedagio="+ed.getVl_pedagio();
			sql+= ",vl_taxa="+ed.getVl_taxa();
			sql+= ",oid_pessoa_origem="+util.getSQLString(ed.getOid_pessoa_origem());
			sql+= ",oid_pessoa_destino="+util.getSQLString(ed.getOid_pessoa_destino());
			sql+= ",oid_pessoa_consignatario="+util.getSQLString(ed.getOid_pessoa_consignatario());

			sql += " WHERE oid_Rota_Produto_proposta = " + ed.getOid_rota_produto_proposta();

			executasql.executarUpdate(sql);
		} catch (Exception exc) {
			throw new Excecoes(exc.getMessage(), exc,
					this.getClass().getName(), "altera()");
		}
	}

	public void alteraTabela(Rota_Produto_PropostaED ed) throws Excecoes {

		String sql = null;
		try {

			sql = " UPDATE Rotas_Produtos_Propostas SET ";
			sql+= "oid_tabela_frete="+ ed.getOid_origem();

			sql += " WHERE oid_Rota_Produto_proposta = " + ed.getOid_rota_produto_proposta();

			executasql.executarUpdate(sql);
		} catch (Exception exc) {
			throw new Excecoes(exc.getMessage(), exc,
					this.getClass().getName(), "alteraTabela()");
		}
	}

	public void deleta(Rota_Produto_PropostaED ed) throws Excecoes {

		String sql = null;
		try {

			sql = " DELETE FROM Rotas_Produtos_Propostas WHERE oid_Rota_Produto_proposta = ";
			sql += ed.getOid_rota_produto_proposta();

			executasql.executarUpdate(sql);

		} catch (Exception exc) {
			throw new Excecoes(exc.getMessage(), exc,
					this.getClass().getName(), "deleta()");
		}
	}

	public ArrayList lista(Rota_Produto_PropostaED ed) throws Excecoes {

		String sql = null;
		ArrayList list = new ArrayList();
		boolean consulta_lista = true;
		try {
			sql = " SELECT rpp.*, prod.cd_produto, prod.nm_produto, p.nr_proposta, p.oid_proposta " +
					", po.nm_razao_social as nm_po, po.nr_cnpj_cpf as nr_po " +
					", pd.nm_razao_social as nm_pd, pd.nr_cnpj_cpf as nr_pd " +
					", pc.nm_razao_social as nm_pc, pc.nr_cnpj_cpf as nr_pc " +
					" FROM Propostas p, Rotas_Produtos_Propostas rpp" +
							" left join pessoas po on rpp.oid_pessoa_origem = po.oid_pessoa " +
							" left join pessoas pd on rpp.oid_pessoa_destino = pd.oid_pessoa " +
							" left join pessoas pc on rpp.oid_pessoa_consignatario = pc.oid_pessoa " +
							", Produtos_Propostas pp " +
							" left join produtos prod on pp.oid_produto = prod.oid_produto "
					+ " WHERE p.oid_proposta = pp.oid_proposta " +
					" AND pp.oid_produto_proposta = rpp.oid_produto_proposta";
			if (ed.getOid_proposta() > 0) {
				sql += " and p.oid_proposta = " + ed.getOid_proposta();
			}
			if (ed.getOid_produto_proposta() > 0) {
				sql += " and pp.oid_produto_proposta = " + ed.getOid_produto_proposta();
			}
			if (ed.getOid_rota_produto_proposta() > 0) {
				sql += " and rpp.oid_rota_produto_proposta = " + ed.getOid_rota_produto_proposta();
			}

			sql += " ORDER BY pp.oid_Produto_Proposta, rpp.oid_rota_produto_proposta";

//			// (sql);

			ResultSet res = this.executasql.executarConsulta(sql);
			ResultSet res2 = null;
			while (res.next()) {
				Rota_Produto_PropostaED edVolta = new Rota_Produto_PropostaED();

				edVolta.setOid_rota_produto_proposta(res.getLong("oid_Rota_Produto_Proposta"));
				edVolta.setOid_produto_proposta(res.getLong("oid_Produto_Proposta"));
				edVolta.setOid_proposta(res.getLong("oid_Proposta"));
				edVolta.setNr_proposta(res.getLong("nr_proposta"));

				edVolta.setOid_origem(res.getLong("oid_origem"));
				edVolta.setDm_origem(res.getString("dm_origem"));
				edVolta.setNm_origem(res.getString("nm_origem"));
				if(JavaUtil.doValida(edVolta.getDm_origem())){
					if(edVolta.getDm_origem().equals("E")){
						EstadoBean or = EstadoBean.getByOID(new Long(edVolta.getOid_origem()).intValue());
						edVolta.setCd_origem(or.getCD_Estado());
					} else if(edVolta.getDm_origem().equals("P")){
						PaisBean or = PaisBean.getByOID(new Long(edVolta.getOid_origem()).intValue());
						edVolta.setCd_origem(or.getCD_Pais());
					} else {
						CidadeBean or = CidadeBean.getByOID(new Long(edVolta.getOid_origem()).intValue());
						edVolta.setCd_origem(or.getCD_Cidade());
						edVolta.setNm_origem(edVolta.getNm_origem() + "/" + or.getCD_Estado());
					}
				} else {
					CidadeBean or = CidadeBean.getByOID(new Long(edVolta.getOid_origem()).intValue());
					edVolta.setCd_origem(or.getCD_Cidade());
					edVolta.setNm_origem(edVolta.getNm_origem() + "/" + or.getCD_Estado());
				}

				edVolta.setOid_destino(res.getLong("oid_destino"));
				edVolta.setDm_destino(res.getString("dm_destino"));
				edVolta.setNm_destino(res.getString("nm_destino"));
				if(JavaUtil.doValida(edVolta.getDm_destino())){
					if(edVolta.getDm_destino().equals("E")){
						EstadoBean de = EstadoBean.getByOID(new Long(edVolta.getOid_destino()).intValue());
						edVolta.setCd_destino(de.getCD_Estado());
					} else if(edVolta.getDm_destino().equals("P")){
						PaisBean de = PaisBean.getByOID(new Long(edVolta.getOid_destino()).intValue());
						edVolta.setCd_destino(de.getCD_Pais());
					} else {
						CidadeBean de = CidadeBean.getByOID(new Long(edVolta.getOid_destino()).intValue());
						edVolta.setCd_destino(de.getCD_Cidade());
						edVolta.setNm_destino(edVolta.getNm_destino() + "/" + de.getCD_Estado());
					}
				} else {
					CidadeBean de = CidadeBean.getByOID(new Long(edVolta.getOid_destino()).intValue());
					edVolta.setCd_destino(de.getCD_Cidade());
					edVolta.setNm_destino(edVolta.getNm_destino() + "/" + de.getCD_Estado());
				}

				edVolta.setOid_consignatario(res.getLong("oid_consignatario"));
				edVolta.setDm_consignatario(res.getString("dm_consignatario"));
				edVolta.setNm_consignatario(res.getString("nm_consignatario"));
				if(JavaUtil.doValida(edVolta.getDm_consignatario())){
					if(edVolta.getDm_consignatario().equals("E")){
						EstadoBean or = EstadoBean.getByOID(new Long(edVolta.getOid_consignatario()).intValue());
						edVolta.setNm_consignatario(or.getCD_Estado());
					} else if(edVolta.getDm_consignatario().equals("P")){
						PaisBean or = PaisBean.getByOID(new Long(edVolta.getOid_consignatario()).intValue());
						edVolta.setNm_consignatario(or.getCD_Pais());
					} else {
						CidadeBean or = CidadeBean.getByOID(new Long(edVolta.getOid_consignatario()).intValue());
						edVolta.setNm_consignatario(or.getNM_Cidade() + "/" + or.getCD_Estado());
					}
				} else {
					CidadeBean or = CidadeBean.getByOID(new Long(edVolta.getOid_consignatario()).intValue());
					edVolta.setNm_consignatario(or.getNM_Cidade() + "/" + or.getCD_Estado());
				}

				edVolta.setOid_pessoa_origem(res.getString("oid_pessoa_origem"));
				edVolta.setNr_cnpj_cpf_origem(JavaUtil.getValue(res.getString("Nr_po")));
				edVolta.setNm_razao_social_origem(JavaUtil.getValue(res.getString("Nm_po")));
				edVolta.setOid_pessoa_destino(res.getString("oid_pessoa_destino"));
				edVolta.setNr_cnpj_cpf_destino(JavaUtil.getValue(res.getString("Nr_pd")));
				edVolta.setNm_razao_social_destino(JavaUtil.getValue(res.getString("Nm_pd")));
				edVolta.setOid_pessoa_consignatario(res.getString("oid_pessoa_consignatario"));
				edVolta.setNr_cnpj_cpf_consignatario(JavaUtil.getValue(res.getString("Nr_pc")));
				edVolta.setNm_razao_social_consignatario(JavaUtil.getValue(res.getString("Nm_pc")));

				edVolta.setNr_volume_mensal(res.getDouble("nr_volume_mensal"));
				edVolta.setNr_volume_minimo(res.getDouble("nr_volume_minimo"));
				edVolta.setVl_servico(res.getDouble("vl_servico"));
				edVolta.setVl_servico_minimo(res.getDouble("vl_servico_minimo"));

				edVolta.setDm_unidade(util.getValueDef(res.getString("dm_unidade"),""));
				edVolta.setNm_unidade(edVolta.getDescUnidadeRed());
				edVolta.setTx_viagens(util.getValueDef(res.getString("tx_viagens"),""));
				edVolta.setTx_veiculos(util.getValueDef(res.getString("tx_veiculos"),""));
				edVolta.setTx_equipamentos(util.getValueDef(res.getString("tx_equipamentos"),""));
				edVolta.setTx_capacidade_carga(util.getValueDef(res.getString("tx_capacidade_carga"),""));
				edVolta.setTx_observacao(util.getValueDef(res.getString("tx_observacao"),""));

				edVolta.setVl_advalorem(res.getDouble("vl_advalorem"));
				edVolta.setVl_pedagio(res.getDouble("vl_pedagio"));
				edVolta.setVl_taxa(res.getDouble("vl_taxa"));

				String oid_tabela = util.getTableStringValue("oid_tabela_frete", "tabelas_fretes", "Tabelas_Fretes.Oid_rota_produto_proposta = " + edVolta.getOid_rota_produto_proposta());
				if(JavaUtil.doValida(oid_tabela))
					edVolta.setOid_tabela_frete(new Long(oid_tabela).longValue());

				list.add(edVolta);

			}
			return list;
		} catch (Exception exc) {
			exc.printStackTrace();
			throw new Excecoes(exc.getMessage(), exc,
					this.getClass().getName(), "lista()");
		}

	}

	public Rota_Produto_PropostaED getByRecord(Rota_Produto_PropostaED ed) throws Excecoes {

		try {
			Iterator it = this.lista(ed).iterator();
			if (it.hasNext())
				return (Rota_Produto_PropostaED) it.next();
			else
				return new Rota_Produto_PropostaED();
		} catch (Exception exc) {
			throw new Excecoes(exc.getMessage(), exc,
					this.getClass().getName(), "getByRecord()");
		}
	}

}
